﻿using System.Text.RegularExpressions;

namespace System.NETool;

/// <summary>
/// 模板引擎类，用于处理字符串模板的变量替换和渲染。
/// </summary>
public class TemplateEngine
{
    /// <summary>
    /// 模板内容。
    /// </summary>
    private string Content { get; set; }

    /// <summary>
    /// 初始化 TemplateEngine 类的新实例。
    /// </summary>
    /// <param name="content">模板内容。</param>
    public TemplateEngine(string content)
    {
        Content = content;
    }

    /// <summary>
    /// 设置模板中的变量。
    /// </summary>
    /// <param name="key">变量名。</param>
    /// <param name="value">变量值。</param>
    /// <returns>返回当前 TemplateEngine 实例。</returns>
    public TemplateEngine Set(string key, string value)
    {
        Content = Content.Replace("{{" + key + "}}", value);
        return this;
    }

    /// <summary>
    /// 渲染模板，检查是否有未替换的变量。
    /// </summary>
    /// <returns>渲染后的模板内容。</returns>
    /// <exception cref="ArgumentException">如果存在未替换的变量，则抛出异常。</exception>
    public string Render()
    {
        var mc = Regex.Matches(Content, @"\{\{.+?\}\}");
        foreach (Match m in mc)
        {
            throw new ArgumentException($"模板变量 {m.Value} 未被使用");
        }

        return Content;
    }
}
